package LeetCode.BitCompute;

/**
 * 位运算1：
 * 统计两个数的二进制表示有多少位不同
 * #### 461. [汉明距离](https://leetcode-cn.com/problems/hamming-distance/) Hamming Distance (Easy)
 * ~~~
 * 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
 * 给出两个整数 x 和 y，计算它们之间的汉明距离。
 * 注意：0 ≤ x, y < 231.
 * 示例:
 * 输入: x = 1, y = 4
 * 输出: 2
 * 解释:
 * 1   (0 0 0 1)
 * 4   (0 1 0 0)
 *        ↑   ↑
 * 上面的箭头指出了对应二进制位不同的位置。
 * ~~~
 * 思路：两个数字对应二进制位不同的位置的数目，那么就是做异或操作后1的个数。
 * 异或：相同为0，不同为1
 * 对两个数进行异或操作，位级表示不同的那一位为 1，统计有多少个 1 即可。
 */
public class Test1 {
    public static int hammingDistance(int x, int y) {
        int z = x ^ y;
        int cnt = 0;
        while(z != 0) {
            if ((z & 1) == 1) cnt++;
            z = z >> 1;
        }
        return cnt;
    }

    public static void main(String[] args) {
        System.out.println("位运算1：汉明距离 统计两个数的二进制表示有多少位不同");
        System.out.println(hammingDistance(1,4));
    }
}
